﻿using Oddo.Concept.Crm.Common.Attributes;

namespace Oddo.Concept.Crm.Common.Security
{
    using System.Security.Principal;
    using System.ComponentModel;
using System.Security;

    /// <summary>
    /// Contrat d'interface du service d'authentification
    /// </summary>
    public interface IAuthenticationService : INotifyPropertyChanged
    {
        /// <summary>
        /// Determines si l'utilisateur courant est authentifié
        /// </summary>
        bool IsAuthenticated { get; }
        /// <summary>
        /// Determines si l'authentification est en cours
        /// </summary>
        bool IsAuthenticating { get; }
        /// <summary>
        /// Obtient l'identité de l'utilisateur
        /// </summary>
        IPrincipal CurrentIdentity { get; }
        /// <summary>
        /// Obtient le nom de l'utilisateur courant
        /// </summary>
        string UserName { get; }
        /// <summary>
        /// Obtient une liste des roles de l'utilisateur séparés par une virgule
        /// </summary>
        string UserRoles { get; }
        /// <summary>
        /// Valide les informations d'authentification fournit
        /// </summary>
        void ValidateCredentials(string login, string password);
        /// <summary>
        /// Obtient le mot de passe de l'utilisateur courant
        /// </summary>
        SecureString UserPassword { get; }
    }
}